﻿using Abp.AspNetCore;
using Abp.Modules;
using Abp.Reflection.Extensions;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using NetCore.Configuration;

namespace NetCore.Web.Startup
{
    [DependsOn(typeof(NetCoreWebCoreModule),
        typeof(AbpAspNetCoreModule))]
    public class NetCoreWebMvcModule : AbpModule
    {
        private readonly IHostingEnvironment _env;
        private readonly IConfigurationRoot _appConfiguration;

        public NetCoreWebMvcModule(IHostingEnvironment env)
        {
            _env = env;
            _appConfiguration = env.GetAppConfiguration();
        }

        public override void PreInitialize()
        {
            //去掉审计日志
            Configuration.Auditing.IsEnabled = false; //关闭审计日志，默认为True
            Configuration.Navigation.Providers.Add<NetCoreNavigationProvider>();
            Configuration.Auditing.IsEnabledForAnonymousUsers = false;   //未登录的用户是否记录日志，默认false
            //Configuration.Auditing.MvcControllers.IsEnabled = false;  //用于为MVC控制器开启或关闭审计。默认为true（MVC控制器审计单独配置）
            //Configuration.Auditing.MvcControllers.IsEnabledForChildActions = true;  //用于为子MVC action开启或关闭审计。默认为false。 
            //IsEnabled：用于完全启用/禁用审计系统。默认值：true。
            //IsEnabledForAnonymousUsers：如果设置为true，则为未登录系统的用户保存审核日志。默认值：false。
            //选择器：用于选择其他类以保存审核日志。
            //SaveReturnValues：用于启用/禁用以保存返回值。默认值：false。
            //IgnoredTypes：用于忽略已定义的类型。
            //选择器是一个谓词列表，用于选择保存审计日志的其他类型的类。选择器具有唯一名称和谓词。此列表中唯一的默认选择器用于选择应用
            //Selectors：选择其它类来保存审核日志
            //Configuration.Auditing.Selectors.Add(
            //    new NamedTypeSelector(
            //        "Abp.ApplicationServices",
            //        type => typeof (IApplicationService).IsAssignableFrom(type)
            //    )
            //);
            
            //Configuration.Modules.AbpWebCommon().MultiTenancy.DomainFormat = _appConfiguration["App:ServerRootAddress"] ?? "http://localhost:21022/";

            
            ////关闭实体历史记录日志
            //Configuration.EntityHistory.IsEnabled = false;

            base.PreInitialize();
        }

        public override void Initialize()
        {
            IocManager.RegisterAssemblyByConvention(typeof(NetCoreWebMvcModule).GetAssembly());
        }
    }
}
